package com.gitee.huxing.algorithmic.daily;

import java.util.Arrays;
import java.util.Comparator;

/**
 * @Description: 统计按位能得到的最大值子集数量
 * 给你一个整数数组 nums ，请你找出 nums 子集 按位或 可能得到的 最大值 ，并返回按位或能得到最大值的 不同非空子集的数目 。
 *
 * 如果数组 a 可以由数组 b 删除一些元素（或不删除）得到，则认为数组 a 是数组 b 的一个 子集 。如果选中的元素下标位置不一样，则认为两个子集 不同 。
 *
 * 对数组 a 执行 按位或，结果等于 a[0] OR a[1] OR ... OR a[a.length - 1]（下标从 0 开始）。
 *
 * @ProjectName: AlgorithmicPactice
 * @Package: com.gitee.huxing.algorithmic.daily
 * @ClassName: CountMaxOrSubsets
 * @Author: huxing
 * @DateTime: 2022-03-15 10:26 AM
 */
public class CountMaxOrSubsets {

    public static void main(String[] args) {
        int[] nums = new int[]{2,2,2};
        int[] arr = new int[]{3,2,1};
        System.out.println(countMaxOrSubsets(nums));
    }

    public static int countMaxOrSubsets(int[] nums) {
        // 字集数量为2
        int max = 0, cnt = 0, len = 1 << nums.length;
        for(int i = 0; i < len; i++){
            int val = 0;
            for(int j = 0; j < nums.length; j++){
                int bit = (i >> j) & 1;
                System.out.print(bit);
                if (bit == 1) {
                    val |= nums[j];
                }
            }
            System.out.println();
            if (val > max){
                max = val;
                cnt = 1;
            } else if (val == max){
                cnt++;
            }
        }
        return cnt;
    }
}
